package com.ww.learn.coroutine

import kotlinx.coroutines.async
import kotlinx.coroutines.runBlocking
import kotlin.system.measureTimeMillis

/**
 * async类似于launch。它启动了一个单独的协程，这是一个轻量级的线程并与其它所有的协程一起并发工作
 * 不同之处在于launch返回一个job并且不附带任何结果值，而async返回一个Deferred，这代表了一个将会在稍后提供结果的promise，
 * 可以使用.await()在一个延期的值上得到它的最终结果
 * Deferred也是一个Job，如果需要的话，可以取消它
 */
fun main() = runBlocking {
    val time = measureTimeMillis {
        val one = async { doSomethingUsefulOne() }
        val two = async { doSomethingUsefulTwo() }
        println("The answer is ${one.await() + two.await()}")
    }
    println("Completed in $time ms")
}